package org.bigjava.novelplatform.service;

import org.apache.ibatis.annotations.Param;
import org.bigjava.novelplatform.entity.Books;
import org.bigjava.novelplatform.vo.ChapterContent;
import org.bigjava.novelplatform.vo.ReleaseVo;
import org.bigjava.novelplatform.vo.WriterBookVo;
import org.bigjava.novelplatform.vo.WriterInfoVo;

import java.util.List;

/**
 * @author ykh
 * @create 2022-05-12 14:51
 */
public interface WriterService {
    List<Books> getWorksByUserId(Integer userId);

    /**
     * 保存章节
     * @param chapterContent
     * @param id
     */
    ChapterContent saveChapter(ChapterContent chapterContent, Integer id);

    /**
     * 获取未发布的草稿章节
     *
     * @param bookId
     * @param userId
     * @return
     */
    List<ChapterContent> SelectDraftList(Integer bookId, Integer userId);

    /**
     * 获取章节
     * @param bookId
     * @param chapterId
     * @return
     */
    String selectChapter(Integer bookId, Long chapterId);

    /**
     * 发布章节
     * @param releaseVo
     *
     */
    void release(ReleaseVo releaseVo);

    /**
     * 批量发布
     * @param releaseVo
     */
    void releaseBath(ReleaseVo releaseVo);

    /**
     * 保存为存稿
     * @param chapterContent
     * @param id
     * @return
     */
    ChapterContent saveAsDraft(ChapterContent chapterContent, Integer id);


    /**
     * 查询已发布
     * @param bookId
     * @param id
     * @return
     */
    List<ChapterContent> selectPublishList(@Param("bookId") Integer bookId, @Param("id") Integer id);

    /**
     * 查询已发布的前n章
     * @param bookId
     * @param id
     * @param limit
     * @return
     */
    List<ChapterContent> selectPublishList(Integer bookId, Integer id,Integer limit);

    /**
     * 删除章节
     * @param chapter
     */
    void deleteChapter(Long chapter,Integer userId);

    /**
     * 还原章节
     * @param chapterId
     * @param id
     */
    void restoreChapter(Long chapterId, Integer id);

    /**
     * 删除列表
     * @param bookId
     * @param id
     * @return
     */
    List<ChapterContent> selectDeleteList(Integer bookId, Integer id);

    /**
     * 查询书籍
     * @param bookId
     * @param userId
     * @return
     */
    WriterBookVo selectBook(Integer bookId, Integer userId);

    /**
     * 修改书籍
     * @param books
     * @param id
     */
    void updateBook(Books books, Integer id);

    /**
     * 上架书籍
     * @param bookId
     * @param id
     */
    void sale(Integer bookId, Integer id);

    /**
     * 查询用户正在连载的书籍
     * @param id
     * @return
     */
    Books selectInSerial(Integer id);

    /**
     * 获取作者信息
     * @param id
     * @return
     */
    WriterInfoVo getWriterInfo(Integer id);

    /**
     * 完结书籍
     * @param bookId
     * @param id
     */
    void theBookIsOver(Integer bookId, Integer id);
}
